package com.example.controller.comment;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.example.common.Result;
import com.example.handlers.BaseContext;
import com.example.service.CommentService;
import com.example.vo.CommentVO;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.*;

/**
 * <p>
 * 博客评论管理控制器
 * </p>
 *
 * @author wuyunbin
 * @since 2025-04-10
 */
@RestController
@RequestMapping("/comment/manage")
public class CommentManageController {

    @Resource
    private CommentService commentService;

    /**
     * 获取用户评论列表
     * 普通用户只能查看自己的评论，管理员可以查看所有评论
     */
    @GetMapping("/list")
    public Result<IPage<CommentVO>> getUserComments(
            @RequestParam(defaultValue = "1") Integer pageNum,
            @RequestParam(defaultValue = "10") Integer pageSize) {
        // 获取当前登录用户ID
        Integer currentUserId = BaseContext.getCurrentId();
        if (currentUserId == null) {
            return Result.error("未登录");
        }
        
        // 检查是否管理员
        // 从请求头中获取角色，如果为1则是管理员
        boolean isAdmin = "1".equals(getAdminRoleFromRequest());
        
        // 获取评论列表
        IPage<CommentVO> commentPage = commentService.getUserComments(
                currentUserId.longValue(), pageNum, pageSize, isAdmin);
        
        return Result.success(commentPage);
    }

    /**
     * 删除评论
     * 普通用户只能删除自己的评论，管理员可以删除任何评论
     */
    @DeleteMapping("/{id}")
    public Result<Boolean> deleteComment(@PathVariable Long id) {
        // 获取当前登录用户ID
        Integer currentUserId = BaseContext.getCurrentId();
        if (currentUserId == null) {
            return Result.error("未登录");
        }
        
        // 检查是否管理员
        boolean isAdmin = "1".equals(getAdminRoleFromRequest());
        
        try {
            // 删除评论
            boolean success = commentService.deleteComment(id, currentUserId.longValue(), isAdmin);
            return success ? Result.success(true) : Result.error("删除失败");
        } catch (RuntimeException e) {
            return Result.error(e.getMessage());
        }
    }
    
    /**
     * 临时方法：从localStorage获取角色信息
     * 实际应用中应该从JWT中获取或通过其他安全方式
     */
    private String getAdminRoleFromRequest() {
        // 1. 优先从BaseContext中获取
        String role = BaseContext.getRole();
        
        // 2. 如果BaseContext中没有，则根据系统规则判断
        // 例如，可以根据用户ID范围、权限表等方式
        if (role == null) {
            Integer userId = BaseContext.getCurrentId();
            // 假设ID为1的是管理员
            if (userId != null && userId == 1) {
                return "1";
            }
            return "2"; // 默认为普通用户
        }
        
        return role;
    }
    @PostMapping("/count")
    public Result<Integer> getCommentCount() {
        return Result.success(commentService.getCommentCounts());
    }
} 